package models

// Pagination 分页参数
type Pagination struct {
	Page     int `json:"page" form:"page"`           // 页码
	PageSize int `json:"page_size" form:"page_size"` // 每页数量
}

// Offset 计算偏移量
func (p *Pagination) Offset() int {
	if p.Page <= 0 {
		p.Page = 1
	}
	if p.PageSize <= 0 {
		p.PageSize = 20 // 默认每页10条
	}
	return (p.Page - 1) * p.PageSize
}

// PageResult 分页结果
type PageResult struct {
	Total     int64       `json:"total"`      // 总记录数
	TotalPage int         `json:"total_page"` // 总页数
	List      interface{} `json:"list"`       // 数据列表
	Page      int         `json:"page"`       // 当前页码
	PageSize  int         `json:"page_size"`  // 每页数量
}

// NewPageResult 创建分页结果
func NewPageResult(total int64, list interface{}, page, pageSize int) *PageResult {
	totalPage := 0
	if pageSize > 0 {
		totalPage = int(total) / pageSize
		if int(total)%pageSize > 0 {
			totalPage++
		}
	}
	return &PageResult{
		Total:     total,
		TotalPage: totalPage,
		List:      list,
		Page:      page,
		PageSize:  pageSize,
	}
}
